package tech.aistar.util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * 本类用来演示: 自定义的日期工具类
 *
 * 工具类中的方法推荐定义成static - 方便调用
 * 开发中慎用static关键字
 *
 * @author: success
 * @date: 2021/3/8 10:34 上午
 */
public class DateUtil {
    public static void main(String[] args) {
        System.out.println((20>10)?((45>30)?50:90):100);
       int max = getMaxDays(2012,4);
        System.out.println(max);
    }

    /**
     * 将Date->String
     * @param date
     * @param pattern
     * @return
     */
    public static String format(Date date,String pattern){
        SimpleDateFormat sdf = new SimpleDateFormat(pattern);
        String str = sdf.format(date);
        return str;
    }

    public static Date parse(String sdate,String pattern){
        SimpleDateFormat sdf = new SimpleDateFormat(pattern);
        Date date = null;
        try {
            date = sdf.parse(sdate);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;
    }

    public static int getMaxDay(int year,int month){
        int day = -1;
        switch (month){
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            case 12:
                day = 31;
                break;
            case 2:
                day = isLeapYear(year)?29:28;
                break;
            default:
                day = 30;
        }

        return day;
    }

    /**
     * @param year 年份
     * @param month 月份
     * @return year和month对应的最大天数
     */
    public static int getMaxDays(int year,int month){
        //1. 参数的校验...

        //定义一个变量,用来保存最大天数
        int day = -1;

        if(month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month==12){
            day = 31;
        }else if(month == 2){
            //判断闰年 - 成为一个独立的业务.
            //未来在外部再次被调用的.
            //day = 28;
            //boolean flag = isLeapYear(year);
            //if(flag){
                //day = 29;
                //day++;
                //day+=1;
           //}

//            day = 28;
//            if(isLeapYear(year)){
//                day++;
//            }

            //直接使用三元操作符
            day = isLeapYear(year)?29:28;

        }else{
            day = 30;
        }
        return day;
    }

    /**
     * 判断某年是否为闰年
     * @param year
     * @return
     */
    public static boolean isLeapYear(int year){
        //version01 - if..else..
//        if((year%4==0 && year%100!=0) || year%400==0){
//            return true;
//        }else{
//            return false;
//        }

        //version-02 - 利用return特性
//        if((year%4==0 && year%100!=0) || year%400==0)
//            return true;
//        return false;

        //version
        return (year%4==0 && year%100!=0) || (year%400==0);
    }

    /**
     * 返回某年某月某日是周几
     * @param year
     * @param month
     * @param date
     * @return
     */
    public static int getWeek(int year,int month,int date){
        //构建一个新的日历对象 - 设置三个字段
        Calendar cal = Calendar.getInstance();
        cal.set(year,month-1,date);
        int week = cal.get(Calendar.DAY_OF_WEEK)-1;
        return week;
    }

    /**
     * 根据指定的年月日来构建新的Date日期
     * @param year
     * @param month
     * @param date
     * @return
     */
    public static Date createDate(int year, int month, int date){
        Calendar cal = Calendar.getInstance();
        cal.set(year,month-1,date);
        //Calendar->Date
        return cal.getTime();
    }
}
